# 通过环境变量方式来加载隐私配置
# from datetime import timedelta
# from flask import Flask
#
# app = Flask(__name__)
#
# # 从环境变量中加载配置
# # 优点: 可以保护隐私配置   export ENV_CONFIG="隐私配置的文件路径"
# app.config.from_envvar('ENV_CONFIG')
#
#
# @app.route('/')
# def index():
#     print(app.config.get('SECRET_KEY'))
#     return "index"


"""
环境变量&终端命令 启动程序:
    $ export FLASK_APP="main"  # 设置内置环境变量
    $ export ENV_CONFIG="/xx/secret_config.py"  # 设置隐私配置对应的环境变量
    $ flask run  # 启动web程序
"""


"""
实际开发中的方案:
    开发阶段, 只加载普通配置
    生产阶段, 先加载普通配置, 再通过环境变量的方式加载项目以外的隐私配置并覆盖原有配置
"""
from flask import Flask, current_app, Config
from config import config_dict


def create_app(config_type):
    """封装应用的创建过程"""

    # 创建应用
    flask_app = Flask(__name__)
    # 根据配置类型取出对应的配置子类
    config_class = config_dict[config_type]

    # 先加载普通配置
    flask_app.config.from_object(config_class)
    # 添加路由
    flask_app.add_url_rule('/', index.__name__, index)
    # 再加载隐私配置  设置参数silent=True, 配置加载失败也不报错
    flask_app.config.from_envvar('ENV_CONFIG', silent=True)

    return flask_app


def index():
    # 读取应用配置
    print(current_app.config.get('SQL_URL'))
    # 读取隐私配置
    print(current_app.config.get('SECRET_KEY'))

    return "index"


"""
环境变量&终端命令 启动程序:
    $ export FLASK_APP="main:create_app('pro')"  # 设置内置环境变量
    $ export ENV_CONFIG="./secret_config.py(指定隐私配置文件路径)"  # 设置隐私配置对应的环境变量
    $ flask run  # 启动web程序
"""
